package com.xhh.nphm.system.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.xhh.nphm.common.core.domain.QueryConditionVo;
import com.xhh.nphm.system.domain.TwfSendBackEty;
import com.xhh.nphm.system.domain.TworkFormBaseEty;
import com.xhh.nphm.system.domain.TworkFormLogEty;

import java.util.List;
import java.util.Map;

public interface IWorkFormBaseService extends IService<TworkFormBaseEty> {

    /**
     * 创建工单
     * @param tworkFormBaseEty
     *
     * @return
     */
    int insert(TworkFormBaseEty tworkFormBaseEty);

    /**
     * 根据来电记录id查询工单
     *
     * @param getDealPk
     * @return
     */
    TworkFormBaseEty selectByGetDealPk(Integer getDealPk);

    /**
     *  派单 修改工单状态的
     *
     * @param tworkFormBaseEty
     * @return
     */
    int updateWork(TworkFormBaseEty tworkFormBaseEty);

    /**
     * 获取电话工单初稿列表数据
     * @return 电话工单初稿列表数据
     */
    List<TworkFormBaseEty> findTwfDraftList(TworkFormBaseEty twfb);

    /**
     * 修改电话工单
     * @param tworkFormBaseEty 工单数据
     * @param tworkFormLogEty 操作日志
     * @return
     */
    int saveWorkForm(TworkFormBaseEty tworkFormBaseEty, TworkFormLogEty tworkFormLogEty);

    TworkFormBaseEty selectByPkId(Integer id);

    /**
     * 撤回承办单位处理中的工单
     * @param twfb 工单信息
     * @param twfl 工单操作日志
     * @return 操作结果
     */
    int sendBack(TworkFormBaseEty twfb,TworkFormLogEty twfl);

    /**
     * 已回访工单 列表数据
     * @param tworkFormBaseEty
     * @return
     */
    List<TworkFormBaseEty> backOverListJson(TworkFormBaseEty tworkFormBaseEty);


    /**
     * 获取网评不满意的工单记录
     * @return 工单记录列表
     */
    List<TworkFormBaseEty> findBadCommentTwfbList(TworkFormBaseEty twfb);

    /**
     * 被退回电话工单列表数据
     * @param tworkFormBaseEty
     * @return
     */
    List<TworkFormBaseEty> backFlowJson(TworkFormBaseEty tworkFormBaseEty);

    /**
     * 待审办理结果列表数据
     * @param tworkFormBaseEty
     * @return
     */
    List<TworkFormBaseEty> replyWaitJson(TworkFormBaseEty tworkFormBaseEty);

    /**
     * 重点诉求推荐列表数据
     * @param twfSendBackEty 拟派工单
     * @return 重点诉求推荐列表数据
     */
    List<Map<String, Object>> keyTwfRecommendListJson(TwfSendBackEty twfSendBackEty);

    /**
     * 经常出现的被诉主体列表
     * @return
     */
    List<String> hotSpotAccSubjects();

    /**
     * 热点诉求推荐列表数据
     * @return
     */
    List<Map<String, Object>> hotSpotRecommendListJson(TworkFormBaseEty tworkFormBaseEty);

    /**
     * 近期热点事件推送列表数据
     * @param tworkFormBaseEty 查询条件
     * @return 列表数据
     */
    List<Map<String, Object>> nearHotSpotTwfRecommendListJson(TworkFormBaseEty tworkFormBaseEty);

    /**
     * 近期典型事件推送列表数据
     * @param tworkFormBaseEty 查询条件
     * @return 列表数据
     */
    List<Map<String, Object>> nearTypicalTwfRecommendListJson(TworkFormBaseEty tworkFormBaseEty);

    /**
     * 特殊诉求列表数据
     * @param tworkFormBaseEty 查询条件
     * @return 列表数据
     */
    List<Map<String, Object>> specialTwfRecommendListJson(TworkFormBaseEty tworkFormBaseEty);

    /**
     * 典型诉求列表数据
     * @param tworkFormBaseEty 查询条件
     * @return 列表数据
     */
    List<Map<String, Object>> typicalTwfRecommendListJson(TworkFormBaseEty tworkFormBaseEty);

    /**
     * 待回访电话工单列表数据
     * @param tworkFormBaseEty
     * @return
     */
    List<Map<String,Object>> backWaitListJson(TworkFormBaseEty tworkFormBaseEty);

    /**
     * 根据事发地址 查询电话工单
     * @param fmAddress
     * @return
     */
    List<TworkFormBaseEty> telfmAddressJson(String fmAddress);

    /**
     * 根据被诉主体 查询电话工单
     * @param accSubject
     * @return
     */
    List<TworkFormBaseEty> telaccSubjectJson(String accSubject);

    /**
     * 根据用户角色编号和部门编号 查询全区实时满意情况
     *
     * @param roleId 角色编号
     * @param deptId 部门编号
     * @return List<Map>
     */
    List<Map> psTelTotalHandleState(String roleId,String deptId,boolean flag);

    /**
     * 查看已删除工单详情
     * @param pkId
     * @return
     */
    TworkFormBaseEty getByPkId(Integer pkId);

    /**
     * 根据工单号查询工单详情
     */
    TworkFormBaseEty getByWorkNo(String workNo);

    /**
     * 查询电话紧急联系调整
     * @return
     */
    List<Map<String,Object>> wfListBankName(QueryConditionVo qc);
}